
#include "nane/FileArchiveSystem/ZIP/ZIPFileUncompressed.h"

#include <algorithm>

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ZIPFileUncompressed::ZIPFileUncompressed( ZIPFileArchive* _creator, const InputSeekablePtr& _input, uint32 _beginPos, uint32 _size )
        : Disposable<ZIPFileUncompressed, ZIPFileBase>( _creator, _input, _beginPos, _size )
        , m_currentPos( 0 )
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ZIPFileUncompressed::~ZIPFileUncompressed()
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    uint32 ZIPFileUncompressed::Read( byte* _buffer, uint32 _count )
    {
        uint32 toRead = std::min(_count, m_size - m_currentPos);
        interface->Seek(m_beginPos + m_currentPos);
        uint32 bytesRead = interface->Read(_buffer, toRead);
        m_currentPos += bytesRead;
        return bytesRead;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void ZIPFileUncompressed::Seek( uint32 _pos )
    {
        m_currentPos = std::min(_pos, m_size);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    uint32 ZIPFileUncompressed::Tell()
    {
        return m_currentPos;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    uint32 ZIPFileUncompressed::Size() const
    {
        return m_size;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
